![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
The fastest directory crawler & globbing alternative to glob, fast-glob, & tiny-glob. Crawls 1m files in < 1s
The fdir npm package is a fast and efficient directory crawler that allows you to read and list files in a directory tree. It is designed to be highly performant and can handle large directories with ease.
Basic Directory Crawling
This feature allows you to crawl a directory and get a list of all files with their full paths. The code sample demonstrates how to use fdir to crawl a directory and log the list of files.
const { fdir } = require('fdir');
const api = new fdir().withFullPaths().crawl('path/to/directory');
api.withPromise().then(files => console.log(files));
Filtering Files
This feature allows you to filter the files based on a condition. The code sample shows how to filter files to include only JavaScript files.
const { fdir } = require('fdir');
const api = new fdir().withFullPaths().filter(path => path.endsWith('.js')).crawl('path/to/directory');
api.withPromise().then(files => console.log(files));
Using Streams
This feature allows you to use streams to handle the files as they are found. The code sample demonstrates how to use a stream to log each file as it is crawled.
const { fdir } = require('fdir');
const api = new fdir().withFullPaths().crawl('path/to/directory');
api.withStream().on('data', file => console.log(file));
Using Async/Await
This feature allows you to use async/await syntax for better readability and control over asynchronous operations. The code sample shows how to use async/await to crawl a directory and log the list of files.
const { fdir } = require('fdir');
(async () => {
const api = new fdir().withFullPaths().crawl('path/to/directory');
const files = await api.withPromise();
console.log(files);
})();
fast-glob is a library for searching files by glob patterns. It is highly performant and supports advanced features like negative globs and multiple patterns. Compared to fdir, fast-glob is more focused on pattern matching and offers a rich set of options for globbing.
readdirp is a recursive version of fs.readdir with additional features like filtering and streaming. It is similar to fdir in that it allows you to read directories recursively, but it is less focused on performance and more on providing a simple API for directory traversal.
klaw is a file system walker that uses streams to traverse directories. It is similar to fdir in its use of streams but is generally slower. klaw is more suitable for applications where streaming is a primary requirement.
⚡ The Fastest: Nothing similar (in the NodeJS world) beats fdir
in speed. It can easily crawl a directory containing 1 million files in < 1 second.
💡 Stupidly Easy: fdir
uses expressive Builder pattern to build the crawler increasing code readability.
🤖 Zero Dependencies*: fdir
only uses NodeJS fs
& path
modules.
🕺 Astonishingly Small: < 2KB in size gzipped & minified.
🔥 All Node Versions Supported: Unlike other similar libraries that have dropped support for Node versions < 10, fdir
supports all versions >= 6.
🖮 Hackable: Extending fdir
is extremely simple now that the new Builder API is here. Feel free to experiment around.
* picomatch
must be installed manually by the user to support globbing.
Do you like this project? Support me by donating, creating an issue, becoming a stargazer, or opening a pull request. Thanks.
This project is not dead. In terms of performance, I don't think there is anything more to be done. This is as fast a NodeJS Directory Crawler as you can get. I could be wrong though.
What's next:
Contributions are welcome in all these.
You can install using npm
:
$ npm i fdir
or Yarn:
$ yarn add fdir
const { fdir } = require("fdir");
// create the builder
const api = new fdir().withFullPaths().crawl("path/to/dir");
// get all files in a directory synchronously
const files = api.sync();
// or asynchronously
api.withPromise().then((files) => {
// do something with the result here.
});
I have written in-depth documentation here.
Specs:
Notes:
no-op
(without options) version of fdir
.
$ sudo cpupower frequency-set --governor performance
Last updated: May 13, 2020 (fdir v3.3.0)
$ yarn bench:glob
glob pattern used:
**.js
&**/**.js
Synchronous | Asynchronous |
---|---|
![]() | ![]() |
Last updated: May 10, 2020 (fdir v3.0.0)
$ yarn bench
Synchronous | Asynchronous |
---|---|
![]() | ![]() |
Older versions of fdir (1.x & 2.x) used synchronous lstat
call (lstatSync
) in the asynchronous API to acheive speed on Node < 10. This has been fixed in fdir 3.0.0.
Synchronous | |
---|---|
![]() | ![]() |
Copyright © 2020 Abdullah Atta under MIT. Read full text here.
FAQs
The fastest directory crawler & globbing alternative to glob, fast-glob, & tiny-glob. Crawls 1m files in < 1s
The npm package fdir receives a total of 0 weekly downloads. As such, fdir popularity was classified as not popular.
We found that fdir demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.